$(document).ready(function(){
    $(window).resize(function(){
		var gridTable = $("#gridTable");
		if(gridTable.length > 0){
			gridTable.setGridWidth($(this).width()*0.99);　　
		}
    });
});

/**
 * 异步请求(继承自定义回调函数)
 *
 * @param {Object}
 *            reqUrl 请求url
 * @param {Object}
 *            paramData 请求参数
 * @param {Object}
 *            succCallback 成功回调函数 可选 带有提示信息
 * @param {Object}
 *            errorCallback 失败回调函数 可选
 */
function ajaxRequestJson(reqUrl, paramData, succCallback, errorCallback, async){
    if (async == undefined || async == '') {
        async = true;
    }
    var rtnData = null;
    $.ajax({
        url: reqUrl,
        type: "POST",
        async: async,
        dataType: "json",
        data: paramData,
        success: function(result){
            rtnData = result;
            if (succCallback != undefined && succCallback != '') {
                succCallback(result);
            }
        },
        error: function(XMLHttpRequest, textStatus, errorThrown){
            if (errorCallback != undefined && errorCallback != '') {
                errorCallback.apply(this, [XMLHttpRequest, textStatus, errorThrown]);
            }
        }
    });
    return rtnData;
}


/**
 * 异步请求(自定义成功回调函数没有继承)
 *
 * @param {Object}
 *            reqUrl 请求url
 * @param {Object}
 *            paramData 请求参数
 * @param {Object}
 *            succCallback 成功回调函数 可选 没有任何处理
 * @param {Object}
 *            errorCallback 失败回调函数
 */
function ajaxRequestNoExtends(reqUrl, paramData, succCallback, errorCallback){
    if (succCallback == undefined || succCallback == '') {
        succCallback = function(result){
        };
    }
    
    if (paramData == undefined || paramData == '' || paramData == null) {
        paramData = {};
    }
    
    ErrorCallback = function(XMLHttpRequest, textStatus, errorThrown){
        alert('发现未知错误，请刷新后重试', 'errorInfo');
        if (errorCallback != undefined && errorCallback != '') {
            errorCallback.apply(this, [XMLHttpRequest, textStatus, errorThrown]);
        }
    }
    
    $.ajax({
        url: reqUrl,
        type: "post",
        dataType: "json",
        data: paramData,
        success: succCallback,
        error: ErrorCallback
    });
}
// 异步请求统一错误处理
function ajaxErrorCommonErrorCode(errorCode,resMethod,errorMsg){
	hideLoading();
	if(errorCode == '200'){
		return false;
	}
	
	if(errorCode == '1000'){
		var retStr = "操作失败,原因："+errorMsg;
		alert(retStr);
	}else{
		alert("系统内部异常，请联系系统管理员!");
	}
	
	
//	switch(errorCode){
//		case 800:
//		  retStr+="您尚未登录或登录时间过长,请重新登录!";
//		  break;
//		case 801:
//		  retStr+="请输入合法字符，请不要恶意使用系统!";
//		  break;
//		case 802:
//		  retStr+="00:00-08:00为系统维护时间，请在正常时间使用系统!";
//		  break;
//		  case 400:
//		  retStr+="错误的请求!";
//		  break;
//		  case 404:
//		  retStr+="未知的请求!";
//		  break;
//		  case 500:
//		  retStr+="内部服务器错误!";
//		  break;
//		default:
//		  retStr +=errorMsg;
//	}
	
	if(errorCode == '800'){
		window.location.href = '../login/loginError.do';
	}
	if(errorCode == '802'){
		window.location.href = '../login/loginTimeError.do';
	}
}

function show_alert(msg,callback){
	 layer.alert(msg, {
		 closeBtn: 0 //不显示关闭按钮
	     ,anim: 1 
	     ,btn: ['关闭'] 
	     ,icon: 6    
	      ,yes:function(){
	    	  callback();
	     }
	     });
}


// 数组去重复值
Array.prototype.distinct = function(){
    var arr = [], obj = {}, i = 0, len = this.length, result;
    
    for (; i < len; i++) {
        result = this[i];
        if (obj[result] !== result) {
            arr.push(result);
            obj[result] = result;
        }
    }
    return arr;
};

// 时间格式化
/*
 * 函数：格式化日期 参数：formatStr-格式化字符串 d：将日显示为不带前导零的数字，如1 dd：将日显示为带前导零的数字，如01
 * ddd：将日显示为缩写形式，如Sun dddd：将日显示为全名，如Sunday M：将月份显示为不带前导零的数字，如一月显示为1
 * MM：将月份显示为带前导零的数字，如01 MMM：将月份显示为缩写形式，如Jan MMMM：将月份显示为完整月份名，如January
 * yy：以两位数字格式显示年份 yyyy：以四位数字格式显示年份 h：使用12小时制将小时显示为不带前导零的数字，注意||的用法
 * hh：使用12小时制将小时显示为带前导零的数字 H：使用24小时制将小时显示为不带前导零的数字 HH：使用24小时制将小时显示为带前导零的数字
 * m：将分钟显示为不带前导零的数字 mm：将分钟显示为带前导零的数字 s：将秒显示为不带前导零的数字 ss：将秒显示为带前导零的数字
 * l：将毫秒显示为不带前导零的数字 ll：将毫秒显示为带前导零的数字 tt：显示am/pm TT：显示AM/PM 返回：格式化后的日期
 */
Date.prototype.format = function(formatStr){
    var date = this;
    /*
     * 函数：填充0字符 参数：value-需要填充的字符串, length-总长度 返回：填充后的字符串
     */
    var zeroize = function(value, length){
        if (!length) {
            length = 2;
        }
        value = new String(value);
        for (var i = 0, zeros = ''; i < (length - value.length); i++) {
            zeros += '0';
        }
        return zeros + value;
    };
    return formatStr.replace(/"[^"]*"|'[^']*'|\b(?:d{1,4}|M{1,4}|yy(?:yy)?|([hHmstT])\1?|[lLZ])\b/g, function($0){
        switch ($0) {
            case 'd':
                return date.getDate();
            case 'dd':
                return zeroize(date.getDate());
            case 'ddd':
                return ['Sun', 'Mon', 'Tue', 'Wed', 'Thr', 'Fri', 'Sat'][date.getDay()];
            case 'dddd':
                return ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'][date.getDay()];
            case 'M':
                return date.getMonth() + 1;
            case 'MM':
                return zeroize(date.getMonth() + 1);
            case 'MMM':
                return ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'][date.getMonth()];
            case 'MMMM':
                return ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'][date.getMonth()];
            case 'yy':
                return new String(date.getFullYear()).substr(2);
            case 'yyyy':
                return date.getFullYear();
            case 'h':
                return date.getHours() % 12 || 12;
            case 'hh':
                return zeroize(date.getHours() % 12 || 12);
            case 'H':
                return date.getHours();
            case 'HH':
                return zeroize(date.getHours());
            case 'm':
                return date.getMinutes();
            case 'mm':
                return zeroize(date.getMinutes());
            case 's':
                return date.getSeconds();
            case 'ss':
                return zeroize(date.getSeconds());
            case 'l':
                return date.getMilliseconds();
            case 'll':
                return zeroize(date.getMilliseconds());
            case 'tt':
                return date.getHours() < 12 ? 'am' : 'pm';
            case 'TT':
                return date.getHours() < 12 ? 'AM' : 'PM';
        }
    });
}

// 解析xml数据
function parseXml(xmlData){
    if (xmlData == null || xmlData == "") {
        return;
    }
    
    // 创建xml解析对象
    var xmlDoc = null;
    
    if ($.browser.msie) {
        // xmlDoc = new ActiveXObject("MSXML.DOMDocument");
        xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
        xmlDoc.async = false;
        xmlDoc.loadXML(xmlData);
    }
    else {
        xmlDoc = new DOMParser().parseFromString(xmlData, "text/xml");
    }
    return xmlDoc;
}

//验证组织机构代码
function isValidEntpCode(code){
    var ws = [3, 7, 9, 10, 5, 8, 4, 2];
    var str = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    var reg = /^([0-9A-Z]){8}[0-9|a-z|A-Z]$/;// /^[A-Za-z0-9]{8}-[A-Za-z0-9]{1}$/
    if (!reg.test(code)) {
        return false;
    }
    var sum = 0;
    for (var i = 0; i < 8; i++) {
        sum += str.indexOf(code.charAt(i)) * ws[i];
    }
    var c9 = 11 - (sum % 11);
	 if (c9 == 11) {  
        return '0';  
    } else if (c9 == 10) {  
        return 'X'  
    } else {  
        return c9  
    }  
	
    //c9 = c9 == 10 ? 'X' : c9
    //return c9 == code.charAt(9);
	
}

//验证身份证号
var Wi = [7, 9, 10, 5, 8, 4, 2, 1, 6, 3, 7, 9, 10, 5, 8, 4, 2, 1]; // 加权因子   
var ValideCode = [1, 0, 10, 9, 8, 7, 6, 5, 4, 3, 2]; // 身份证验证位值.10代表X   
function IdCardValidate(idCard){
    idCard = trim(idCard.replace(/ /g, "")); //去掉字符串头尾空格                     
    if (idCard.length == 15) {
        return isValidityBrithBy15IdCard(idCard); //进行15位身份证的验证    
    }
    else 
        if (idCard.length == 18) {
            var a_idCard = idCard.split(""); // 得到身份证数组   
            if (isValidityBrithBy18IdCard(idCard) && isTrueValidateCodeBy18IdCard(a_idCard)) { //进行18位身份证的基本验证和第18位的验证
                return true;
            }
            else {
                return false;
            }
        }
        else {
            return false;
        }
}

/**  
 * 判断身份证号码为18位时最后的验证位是否正确
 * @param a_idCard 身份证号码数组
 * @return
 */
function isTrueValidateCodeBy18IdCard(a_idCard){
    var sum = 0; // 声明加权求和变量   
    if (a_idCard[17].toLowerCase() == 'x') {
        a_idCard[17] = 10; // 将最后位为x的验证码替换为10方便后续操作   
    }
    for (var i = 0; i < 17; i++) {
        sum += Wi[i] * a_idCard[i]; // 加权求和   
    }
    valCodePosition = sum % 11; // 得到验证码所位置   
    if (a_idCard[17] == ValideCode[valCodePosition]) {
        return true;
    }
    else {
        return false;
    }
}

/**  
 * 验证18位数身份证号码中的生日是否是有效生日
 * @param idCard 18位书身份证字符串
 * @return
 */
function isValidityBrithBy18IdCard(idCard18){
    var year = idCard18.substring(6, 10);
    var month = idCard18.substring(10, 12);
    var day = idCard18.substring(12, 14);
    var temp_date = new Date(year, parseFloat(month) - 1, parseFloat(day));
    // 这里用getFullYear()获取年份，避免千年虫问题   
    if (temp_date.getFullYear() != parseFloat(year) ||
    temp_date.getMonth() != parseFloat(month) - 1 ||
    temp_date.getDate() != parseFloat(day)) {
        return false;
    }
    else {
        return true;
    }
}

/**  
 * 验证15位数身份证号码中的生日是否是有效生日
 * @param idCard15 15位书身份证字符串
 * @return
 */
function isValidityBrithBy15IdCard(idCard15){
    var year = idCard15.substring(6, 8);
    var month = idCard15.substring(8, 10);
    var day = idCard15.substring(10, 12);
    var temp_date = new Date(year, parseFloat(month) - 1, parseFloat(day));
    // 对于老身份证中的你年龄则不需考虑千年虫问题而使用getYear()方法   
    if (temp_date.getYear() != parseFloat(year) ||
    temp_date.getMonth() != parseFloat(month) - 1 ||
    temp_date.getDate() != parseFloat(day)) {
        return false;
    }
    else {
        return true;
    }
}

//去掉字符串头尾空格   
function trim(str){
    return str.replace(/(^\s*)|(\s*$)/g, "");
}


/**
 * 验证失败增加提示信息
 * @param {} error
 * @param {} element
 * @returns {}
 */
function errorPlacementQTip(error, element){
    var elem = $(element), corners = ['left top', 'bottom left'], flipIt = elem.parents('span.right').length > 0;
    if (!error.is(':empty')) {
        var target = elem.filter(':not(.valid)');
        //对应multiselect控件
        if ($(target).is("input:hidden") || ($(target).is("select") && $(target).css("display") == "none")) {
            target = $(target).next();
        }
        elem.filter(':not(.valid)').qtip({
            overwrite: false,
            content: error,
            position: {
                //my: corners[flipIt ? 0 : 1],
                //at: corners[flipIt ? 1 : 0],
                my: 'left center',
                at: 'right center',
                target: target,
                viewport: $(window)
            },
            show: {
                event: false,
                ready: true
            },
            hide: false,
            style: {
                classes: 'qtip-red' // Make it red... the classic error colour!
            }
        }).qtip('option', 'content.text', error);
    }
    else {
        elem.qtip('destroy');
    }
}

/**
 *验证成功清理提示信息
 * @returns {}
 */
function successQTip(){
    $.noop;
}

/**
 * 验证失败给目标控件设置样式
 * @param {} element
 * @param {} errorClass
 * @param {} validClass
 * @returns {}
 */
function highlight(element, errorClass, validClass){
    //对应multiselect控件
    if ($(element).is("input:hidden") || ($(element).is("select") && $(element).css("display") == "none")) {
        element = $(element).next();
    }
    $(element).addClass("ui-state-highlight");
}

/**
 * 验证成功给目标控件清理样式
 * @param {} element
 * @param {} errorClass
 * @param {} validClass
 * @returns {}
 */
function unhighlight(element, errorClass, validClass){
    var elem = $(element);
    elem.qtip('destroy'); //清除qtip提示信息（解决动态验证问题：如某个控件在满足某些条件下非空；某些条件下可空）
    //对应multiselect控件
    if ($(element).is("input:hidden") || ($(element).is("select") && $(element).css("display") == "none")) {
        element = $(element).next();
    }
    $(element).removeClass("ui-state-highlight");
}

//动态效果
function showLoading(){
	$("<div id='loading_zzdiv' style=\"position:fixed;top:0;right:0;bottom:0;left:0;z-index:998;width:100%;height:100%;_padding:0 20px 0 0;background:#f6f4f5;display:none;\"></div>").css({
		'display': "block",
		'width': "100%",
		'height': $(document).height(),
		'opacity':'0.8'
	}).appendTo("body");

	$("<div  id='loading_jddiv' style=\"border:1px solid #C7B7E5;color:#37a;font-size:12px;font-weight:bold;position:fixed;top:0;left:50%;z-index:999;opacity:0;filter:alpha(opacity=0);margin-left:-80px;\"></div>").html("<div style='width:180px;height:50px;line-height:50px;border:2px solid #C7B7E5;background:#fff;'><img src='/gmis/images/waiting.gif' style='margin:10px 15px;float:left;display:inline;'>加载中，请稍候...</div>").appendTo("body").stop(true).animate({'margin-top':'300px','opacity':'1'},200);
}

function hideLoading(){
	$("#loading_jddiv").remove();
			
	$("#loading_zzdiv").remove();
}

//图片格式是否正确
function checkPic(picName){
    var bool = true;
    var picflag = picName.split(".");
	var last = picflag.length;
    var flagname = picflag[last-1].toLowerCase();
    if (flagname == "jpg" || flagname == "jpeg" || flagname == "gif" || flagname == "bmp" || flagname == "png" || flagname == "tif" || flagname == "pdf") {
        return true;
    }
    else {
        bool = false;
        return bool;
    }
}

function checkApk(fileName){
    var bool = true;
    var picflag = fileName.split(".");
	var last = picflag.length;
    var flagname = picflag[last-1].toLowerCase();
    if (flagname == "apk" || flagname == "ipa" || flagname == "plist") {
        return true;
    }
    else {
        bool = false;
        return bool;
    }
}

